#!/usr/bin/python3

#import pymysql
import pywintypes
import pymssql
from tkinter import ttk
import tkinter as tk
import tkinter.font as tkFont
from tkinter import *  # 图形界面库
import tkinter.messagebox as messagebox  # 弹窗
import os
import hashlib
import time


class StartPage:
    def __init__(self, parent_window):
        parent_window.update()
        parent_window.destroy()  # 销毁子界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title(' 俄罗斯方块管理系统')
        self.window.geometry('700x670')  # 这里的乘是小x
        photo = tk.PhotoImage(file="背景.png")
        theLabel = tk.Label(self.window, text="", justify=tk.LEFT, image=photo, compound=tk.CENTER, font=("华文行楷", 40),
                            fg="Brown", height=200)
        theLabel.pack(pady=10)

        label = Label(self.window, text=" 俄罗斯方块管理系统", font=("华文行楷", 40), fg="Brown")
        label.pack(pady=40)  # pady=100 界面的长度

        Button(self.window, text="管理员登陆", font=tkFont.Font(size=16), command=lambda: AdminPage(self.window), width=30,
               height=2,
               fg='black', bg='LightYellow', activebackground='gray', activeforeground='black').pack()
        Button(self.window, text=" 用户登陆", font=tkFont.Font(size=16), command=lambda: GameuserPage(self.window), width=30,
               height=2, fg='black', bg='LightYellow', activebackground='gray', activeforeground='black').pack()
        Button(self.window, text="打赏", font=tkFont.Font(size=16), command=lambda: AboutPage(self.window), width=30,
               height=2,
               fg='black', bg='LightYellow', activebackground='gray', activeforeground='black').pack()
        Button(self.window, text='退出系统', height=2, font=tkFont.Font(size=16), width=30, command=self.window.destroy,
               fg='black', bg='LightYellow', activebackground='gray', activeforeground='black').pack()

        self.window.mainloop()  # 主消息循环


# 管理员登陆页面
class AdminPage:
    def __init__(self, parent_window):
        parent_window.update()
        parent_window.destroy()  # 销毁主界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title('管理员登陆页面')
        self.window.geometry('300x450')  # 这里的乘是小x

        label = tk.Label(self.window, text='管理员登陆', bg='YellowGreen', font=("华文行楷", 30), width=30, height=2)
        label.pack()

        Label(self.window, text='管理员账号：', font=tkFont.Font(size=14)).pack(pady=15)
        self.admin_username = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
        self.admin_username.pack()

        Label(self.window, text='管理员密码：', font=tkFont.Font(size=14)).pack(pady=15)
        self.admin_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
        self.admin_pass.pack()

        Label(self.window, text='动态密码：', font=tkFont.Font(size=14)).pack(pady=15)
        self.admin_move = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
        self.admin_move.pack()

        Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=20)
        Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()

        self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
        self.window.mainloop()  # 进入消息循环

    def login(self):
        print(str(self.admin_username.get()))
        print(str(self.admin_pass.get()))
        print(str(self.admin_move.get()))
        admin_pass = None
        name=self.admin_username.get()
        j =self.c_time(name)
        #print(j)
        s = self.getcipher(j)
        #print(s)
        s1=s[0:4]
        print('1',s1)
        admin_move = str(s1)
        flag=0
        # 数据库操作 查询管理员表
        #db = pymysql.connect("LAPTOP-7H22VTRE", "sa", "8841", "gameuser")  # 打开数据库连接
        #db = pymssql.connect("LAPTOP-7H22VTRE", "sa", "8841", "gameuser")  # 打开数据库连接
        db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")

        #db = pymssql.connect(server='DESKTOP-M53S5KM', user='tom', password='Zz1314??', database='st')
        cursor = db.cursor()  # 使用cursor()方法获取操作游标
        sql = "SELECT * FROM admin_login_k WHERE admin_id = '%s'" % (self.admin_username.get())  # SQL 查询语句
        try:
            # 执行SQL语句
            cursor.execute(sql)
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                admin_id = row[0]
                admin_pass = row[1]
                #admin_move = row[2]
                admin_id=admin_id.rstrip();
                admin_pass = admin_pass.rstrip();
                #admin_move = admin_move.rstrip();
                # 打印结果
                print("admin_id=%s,admin_pass=%s" % (admin_id, admin_pass))
        except:
            print("Error: unable to fecth data")
            messagebox.showinfo('警告！', '用户名或密码不正确！')
        db.close()  # 关闭数据库连接

        print("正在登陆管理员管理界面")
        print("self", self.admin_pass)
        print("local", admin_pass)
        if admin_move==self.admin_move.get():
            flag=1
        print(222)
        print(flag)

        if self.admin_pass.get() == admin_pass :
            if(flag==1):
                AdminManage(self.window)  # 进入管理员操作界面
            else:
                messagebox.showinfo('警告！', '动态密码不正确，请检查是否过期！')
        else:
            messagebox.showinfo('警告！', '用户名或密码不正确！')

    def back(self):
        StartPage(self.window)  # 显示主窗口 销毁本窗口

    def c_time(self,name):
        # name=input()
        # 格式化成2016-03-20 11:45:39形式

        # s=time.strftime("%Y-%m-%d-%I-%M-%S", time.localtime())
        s = time.strftime("%Y%m%d%I%M", time.localtime())
        t = int(s[11:12]) // 2  # 两分钟一更新
        t1 = s[0:11]
        #print(t, t1)
        s = t1 + str(t)
        m = int(s)
        #print(m)
        n = 12051279450352771530930169420275071659160282213184611267389664605008438993053547597908895430770573611658922430007311234864519675690221190989129543994610680572600788140839429481479258102920750769156566147060763070794523917246687182389704546881413828821164213271077156249557525384622133938533101816237483400832661269322093989906236927698187451235173887216378942319478478253098672071938374833339604007843160672382488964797030053285491404519757659259969406712425008541221143679481429297953645051566141918952945585674940591668730949219112790670301182732433264842043549631646465559286244115887545624951507116991589952865671
        e = 65537
        c = str(pow(m, e, n))
        p = 48453215
        q = 5665587989282387866678
        s1 = str(c + name)
        return s1
        # print(s1)

    def getcipher(self,num):
        t = 0
        t1 = 0
        s1 = hashlib.sha512(str(num).encode(encoding='UTF-8')).hexdigest()

        s2 = ""
        for c in s1:
            if c == 'f':
                t = t + 1
        if (t == 0 or t == 1):  # 如果f只有一个或没有，末位补9
            s2 = s1 + '9'
            return s2

        i = 0
        while (i < len(s1)):
            # print(i)
            if s1[i] == 'f':
                t1 = t1 + 1
                if t1 == t // 2:
                    s2 = s2 + "f1"
                    # +1可能把f跳了，两f连一起
                    # i=i+1 #python的for循环改不了i
                else:
                    s2 = s2 + s1[i:i + 1]
            else:
                s2 = s2 + s1[i:i + 1]
            i = i + 1
        # print(t)
        # print(t//2)
        # print(s2)
        # print(s1)
        return s2


#  用户登陆页面
class GameuserPage:
    def __init__(self, parent_window):
        parent_window.update()
        parent_window.destroy()  # 销毁主界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title(' 用户登陆')
        self.window.geometry('300x450')  # 这里的乘是小x

        label = tk.Label(self.window, text=' 用户登陆', bg='LemonChiffon', font=("华文行楷", 30), width=30, height=2)
        label.pack()

        Label(self.window, text=' 用户账号：', font=tkFont.Font(size=14)).pack(pady=25)
        self.gameuser_id = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
        self.gameuser_id.pack()

        Label(self.window, text=' 用户密码：', font=tkFont.Font(size=14)).pack(pady=25)
        self.gameuser_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
        self.gameuser_pass.pack()

        Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
        Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()

        self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
        self.window.mainloop()  # 进入消息循环

    def login(self):
        print(str(self.gameuser_id.get()))
        print(str(self.gameuser_pass.get()))
        user_pass = None

        # 数据库操作 查询普通用户表
        #db = pymysql.connect("LAPTOP-7H22VTRE", "sa", "8841", "gameuser")  # 打开数据库连接
        #db = pymssql.connect("LAPTOP-7H22VTRE", "sa", "8841", "gameuser")  # 打开数据库连接
        db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")

        cursor = db.cursor()  # 使用cursor()方法获取操作游标
        sql = "SELECT * FROM user_login_k WHERE user_id = '%s'" % (self.gameuser_id.get())  # SQL 查询语句
        #sql = "SELECT * FROM user_login_k WHERE  id = '%s'" % (self.gameuser_id.get())  # SQL 查询语句
        try:
            # 执行SQL语句
            cursor.execute(sql)
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                user_id = row[0]
                user_pass = row[1]
                # 打印结果
                user_id=user_id.rstrip()
                user_pass = user_pass.rstrip()
                print("user_id=%s,user_pass=%s" % (user_id, user_pass))
        except:
            print("Error: unable to fecth data")
            messagebox.showinfo('警告！', '用户名或密码不正确！')
        db.close()  # 关闭数据库连接

        print("正在登陆 用户信息查看界面")
        print("self", self.gameuser_pass.get())
        print("local", user_pass)

        if self.gameuser_pass.get() == user_pass:
            GameuserView(self.window, self.gameuser_id.get())  # 进入 用户信息查看界面
        else:
             #messagebox.showinfo('警告！', '用户名或密码不正确！')
             messagebox.showinfo('警告！', '用户名或密码不正确！')


    def back(self):
        StartPage(self.window)  # 显示主窗口 销毁本窗口


# 管理员操作界面
class AdminManage:
    def __init__(self, parent_window):
        parent_window.update()
        parent_window.destroy()  # 销毁主界面

        self.window = Tk()  # 初始框的声明
        self.window.title('管理员操作界面')

        self.frame_left_top = tk.Frame(width=300, height=200)
        self.frame_right_top = tk.Frame(width=200, height=200)
        self.frame_center = tk.Frame(width=500, height=400)
        self.frame_bottom = tk.Frame(width=650, height=50)

        # 定义下方中心列表区域
        self.columns = ("账户", "姓名", "密码", "剩余时长")
        self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=self.columns)
        self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
        # 定义树形结构与滚动条
        self.tree.configure(yscrollcommand=self.vbar.set)

        # 表格的标题
        self.tree.column("账户", width=150, anchor='center')  # 表示列,不显示
        self.tree.column("姓名", width=150, anchor='center')
        self.tree.column("密码", width=100, anchor='center')
        self.tree.column("剩余时长", width=100, anchor='center')

        # 调用方法获取表格内容插入
        self.tree.grid(row=0, column=0, sticky=NSEW)
        self.vbar.grid(row=0, column=1, sticky=NS)

        self.id = []
        self.name = []
        self.cipher = []
        self.age = []
        # 打开数据库连接
        #db = pymysql.connect("localhost", "root", "root", "gameuser")
        db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
        cursor = db.cursor()  # 使用cursor()方法获取操作游标
        sql = "SELECT * FROM user_k"  # SQL 查询语句
        try:
            # 执行SQL语句
            cursor.execute(sql)
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                self.id.append(row[0])
                self.name.append(row[1])
                self.cipher.append(row[2])
                self.age.append(row[3])
            # print(self.id)
            # print(self.name)
            # print(self.cipher)
            # print(self.age)
        except:
            print("Error: unable to fetch data")
            messagebox.showinfo('警告！', '数据库连接失败！')
        db.close()  # 关闭数据库连接

        print("test***********************")
        for i in range(min(len(self.id), len(self.name), len(self.cipher), len(self.age))):  # 写入数据
            self.tree.insert('', i, values=(self.id[i], self.name[i], self.cipher[i], self.age[i]))

        for col in self.columns:  # 绑定函数，使表头可排序
            self.tree.heading(col, text=col,
                              command=lambda _col=col: self.tree_sort_column(self.tree, _col, False))

        # 定义顶部区域
        # 定义左上方区域
        self.top_title = Label(self.frame_left_top, text=" 用户信息:", font=('Verdana', 20))
        self.top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=10)

        self.left_top_frame = tk.Frame(self.frame_left_top)
        self.var_id = StringVar()  # 声明账户
        self.var_name = StringVar()  # 声明姓名
        self.var_cipher = StringVar()  # 声明密码
        self.var_age = StringVar()  # 声明剩余时长
        # 账户
        self.right_top_id_label = Label(self.frame_left_top, text="账户：", font=('Verdana', 15))
        self.right_top_id_entry = Entry(self.frame_left_top, textvariable=self.var_id, font=('Verdana', 15))
        self.right_top_id_label.grid(row=1, column=0)  # 位置设置
        self.right_top_id_entry.grid(row=1, column=1)
        # 姓名
        self.right_top_name_label = Label(self.frame_left_top, text="姓名：", font=('Verdana', 15))
        self.right_top_name_entry = Entry(self.frame_left_top, textvariable=self.var_name, font=('Verdana', 15))
        self.right_top_name_label.grid(row=2, column=0)  # 位置设置
        self.right_top_name_entry.grid(row=2, column=1)
        # 密码
        self.right_top_cipher_label = Label(self.frame_left_top, text="密码：", font=('Verdana', 15))
        self.right_top_cipher_entry = Entry(self.frame_left_top, textvariable=self.var_cipher,font=('Verdana', 15))
        self.right_top_cipher_label.grid(row=3, column=0)  # 位置设置
        self.right_top_cipher_entry.grid(row=3, column=1)
        # 剩余时长
        self.right_top_cipher_label = Label(self.frame_left_top, text="剩余时长：", font=('Verdana', 15))
        self.right_top_cipher_entry = Entry(self.frame_left_top, textvariable=self.var_age,font=('Verdana', 15))
        self.right_top_cipher_label.grid(row=4, column=0)  # 位置设置
        self.right_top_cipher_entry.grid(row=4, column=1)

        # 定义右上方区域
        self.right_top_title = Label(self.frame_right_top, text="操作：", font=('Verdana', 20))

        self.tree.bind('<Button-1>', self.click)  # 左键获取位置
        self.right_top_button1 = ttk.Button(self.frame_right_top, text='新建 用户信息', width=20, command=self.new_row)
        self.right_top_button2 = ttk.Button(self.frame_right_top, text='更新选中 用户信息', width=20,
                                            command=self.updata_row)
        self.right_top_button3 = ttk.Button(self.frame_right_top, text='删除选中 用户信息', width=20,
                                            command=self.del_row)

        # 位置设置
        self.right_top_title.grid(row=1, column=0, pady=10)
        self.right_top_button1.grid(row=2, column=0, padx=20, pady=10)
        self.right_top_button2.grid(row=3, column=0, padx=20, pady=10)
        self.right_top_button3.grid(row=4, column=0, padx=20, pady=10)

        # 整体区域定位
        self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
        self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
        self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
        self.frame_bottom.grid(row=2, column=0, columnspan=2)

        self.frame_left_top.grid_propagate(0)
        self.frame_right_top.grid_propagate(0)
        self.frame_center.grid_propagate(0)
        self.frame_bottom.grid_propagate(0)

        self.frame_left_top.tkraise()  # 开始显示主菜单
        self.frame_right_top.tkraise()  # 开始显示主菜单
        self.frame_center.tkraise()  # 开始显示主菜单
        self.frame_bottom.tkraise()  # 开始显示主菜单

        self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
        self.window.mainloop()  # 进入消息循环

    def back(self):
        StartPage(self.window)  # 显示主窗口 销毁本窗口

    def click(self, event):
        self.col = self.tree.identify_column(event.x)  # 列
        self.row = self.tree.identify_row(event.y)  # 行

        print(self.col)
        print(self.row)
        self.row_info = self.tree.item(self.row, "values")
        self.var_id.set(self.row_info[0])
        self.var_name.set(self.row_info[1])
        self.var_cipher.set(self.row_info[2])
        self.var_age.set(self.row_info[3])
        self.right_top_id_entry = Entry(self.frame_left_top, state='disabled', textvariable=self.var_id,
                                        font=('Verdana', 15))

        print('')

    def tree_sort_column(self, tv, col, reverse):  # Treeview、列名、排列方式
        l = [(tv.set(k, col), k) for k in tv.get_children('')]
        l.sort(reverse=reverse)  # 排序方式
        # rearrange items in sorted positions
        for index, (val, k) in enumerate(l):  # 根据排序后索引移动
            tv.move(k, '', index)
        tv.heading(col, command=lambda: self.tree_sort_column(tv, col, not reverse))  # 重写标题，使之成为再点倒序的标题

    def new_row(self):
        print('123')
        print(self.var_id.get())
        print(self.id)
        if str(self.var_id.get()) in self.id:
            messagebox.showinfo('警告！', '该用户已存在！')
        else:
            if self.var_id.get() != '' and self.var_name.get() != '' and self.var_cipher.get() != '' and self.var_age.get() != '':
                # 打开数据库连接
                #db = pymysql.connect("localhost", "root", "root", "gameuser")
                db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
                cursor = db.cursor()  # 使用cursor()方法获取操作游标
                sql = "INSERT INTO user_k(id, name, cipher, age) \
				       VALUES ('%s', '%s', '%s', '%s')" % \
                      (self.var_id.get(), self.var_name.get(), self.var_cipher.get(), self.var_age.get())  # SQL 插入语句
                try:
                    cursor.execute(sql)  # 执行sql语句
                    db.commit()  # 提交到数据库执行
                except:
                    db.rollback()  # 发生错误时回滚
                    messagebox.showinfo('警告！', '数据库连接失败！')
                db.close()  # 关闭数据库连接

                self.id.append(self.var_id.get())
                self.name.append(self.var_name.get())
                self.cipher.append(self.var_cipher.get())
                self.age.append(self.var_age.get())
                self.tree.insert('', len(self.id) - 1, values=(
                    self.id[len(self.id) - 1], self.name[len(self.id) - 1], self.cipher[len(self.id) - 1],
                    self.age[len(self.id) - 1]))
                self.tree.update()
                messagebox.showinfo('提示！', '插入成功！')
            else:
                messagebox.showinfo('警告！', '请填写 用户数据')

    def updata_row(self):
        res = messagebox.askyesnocancel('警告！', '是否更新所填数据？')
        if res == True:
            if self.var_id.get() == self.row_info[0]:  # 如果所填账户 与 所选账户一致
                # 打开数据库连接
                #db = pymysql.connect("localhost", "root", "root", "gameuser")
                db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
                cursor = db.cursor()  # 使用cursor()方法获取操作游标
                sql = "UPDATE user_k SET name = '%s', cipher = '%s', age = '%s' \
				 WHERE id = '%s'" % (
                self.var_name.get(), self.var_cipher.get(), self.var_age.get(), self.var_id.get())  # SQL 插入语句
                try:
                    cursor.execute(sql)  # 执行sql语句
                    db.commit()  # 提交到数据库执行
                    messagebox.showinfo('提示！', '更新成功！')
                except:
                    db.rollback()  # 发生错误时回滚
                    messagebox.showinfo('警告！', '更新失败，数据库连接失败！')
                db.close()  # 关闭数据库连接

                id_index = self.id.index(self.row_info[0])
                self.name[id_index] = self.var_name.get()
                self.cipher[id_index] = self.var_cipher.get()
                self.age[id_index] = self.var_age.get()

                self.tree.item(self.tree.selection()[0], values=(
                    self.var_id.get(), self.var_name.get(), self.var_cipher.get(),
                    self.var_age.get()))  # 修改对于行信息
            else:
                messagebox.showinfo('警告！', '不能修改 用户账户！')

    def del_row(self):
        res = messagebox.askyesnocancel('警告！', '是否删除所选数据？')
        if res == True:
            print(self.row_info[0])  # 鼠标选中的账户
            print(self.tree.selection()[0])  # 行号
            print(self.tree.get_children())  # 所有行
            # 打开数据库连接
            #db = pymysql.connect("localhost", "root", "root", "gameuser")
            db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
            cursor = db.cursor()  # 使用cursor()方法获取操作游标
            sql = "DELETE FROM user_k WHERE id = '%s'" % (self.row_info[0])  # SQL 插入语句
            try:
                cursor.execute(sql)  # 执行sql语句
                db.commit()  # 提交到数据库执行
                messagebox.showinfo('提示！', '删除成功！')
            except:
                db.rollback()  # 发生错误时回滚
                messagebox.showinfo('警告！', '删除失败，数据库连接失败！')
            db.close()  # 关闭数据库连接

            id_index = self.id.index(self.row_info[0])
            print(id_index)
            del self.id[id_index]
            del self.name[id_index]
            del self.cipher[id_index]
            del self.age[id_index]
            print(self.id)
            self.tree.delete(self.tree.selection()[0])  # 删除所选行
            print(self.tree.get_children())


#  用户查看信息界面
class GameuserView:

    def __init__(self, parent_window, gameuser_id):
        parent_window.update()
        parent_window.destroy()  # 销毁主界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title('关于')
        self.window.geometry('300x450')  # 这里的乘是小x

        label = tk.Label(self.window, text=' 用户信息查看', bg='Gold', font=("华文行楷", 25), width=30, height=2)
        label.pack(pady=20)

        self.id = '账户:' + ''
        self.name = '姓名:' + ''
        self.cipher = '密码:' + ''
        self.age = '剩余时长:' + ''
        # 打开数据库连接
        #db = pymysql.connect("localhost", "root", "root", "gameuser")
        db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
        cursor = db.cursor()  # 使用cursor()方法获取操作游标
        sql = "SELECT * FROM user_k WHERE id = '%s'" % (gameuser_id)  # SQL 查询语句
        try:
            # 执行SQL语句
            cursor.execute(sql)
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                self.id = '账户:' + row[0]
                self.name = '姓名:' + row[1]
                self.cipher = '密码:' + row[2]
                self.age = '剩余时长:' + row[3]
        except:
            print("Error: unable to fetch data")
        db.close()  # 关闭数据库连接

        Label(self.window, text=self.id, font=('Verdana', 18)).pack(pady=5)
        Label(self.window, text=self.name, font=('Verdana', 18)).pack(pady=5)
        Label(self.window, text=self.cipher, font=('Verdana', 18)).pack(pady=5)
        Label(self.window, text=self.age, font=('Verdana', 18)).pack(pady=5)

        Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=16), command=self.back).pack(pady=25)
        #Button(self.window, text="启动游戏", width=8, font=tkFont.Font(size=16), command=Game1()).pack(pady=20)
        Button(self.window, text="启动游戏", width=8, font=tkFont.Font(size=16), command=lambda:self.Game1()).pack(pady=20)
        Button(self.window, text="充值时长", width=8, font=tkFont.Font(size=16), command=lambda: self.pic()).place(x=200, y=180)
        #必须要lambda才是按动触发，不然直接触发
        self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
        self.window.mainloop()  # 进入消息循环

    def Game1(self):
        os.startfile("俄罗斯方块.exe")#startfile能运行exe，os.system只能从exe里面拿输出
    def pic(self):
        os.system("付款.png")
    def back(self):
        StartPage(self.window)  # 显示主窗口 销毁本窗口

# About页面
class AboutPage:
    def __init__(self, parent_window):
        parent_window.update()
        parent_window.destroy()  # 销毁主界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title('打赏')
        self.window.geometry('600x650')  # 这里的乘是小x

        label = tk.Label(self.window, text=' 支持一下咯', bg='green', font=('Verdana', 20), width=30, height=2)
        label.pack()

        photo = tk.PhotoImage(file="付款.png")
        theLabel = tk.Label(self.window, text="", justify=tk.LEFT, image=photo, compound=tk.CENTER, font=("华文行楷", 40),
                            fg="Brown", height=400)
        theLabel.pack(pady=10)

        Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack(pady=10,padx=100)
        photo1 = tk.PhotoImage(file="可爱.png")
        theLabel1 = tk.Label(self.window, text="", image=photo1, compound=tk.CENTER, font=("华文行楷", 40),
                            fg="Brown", height=400)
        theLabel1.pack(pady=5,side=tk.RIGHT)

        self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
        self.window.mainloop()  # 进入消息循环

    def back(self):
        StartPage(self.window)  # 显示主窗口 销毁本窗口


if __name__ == '__main__':
    try:
        # 打开数据库连接 连接测试
       # db = pymysql.connect("localhost", "root", "root", "gameuser")
        db = pymssql.connect(server="LAPTOP-7H22VTRE", user="sa", password="8841", database="gameuser")
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()


        # 关闭数据库连接
        db.close()

        # 实例化Application
        window = tk.Tk()
        StartPage(window)
    except:
        messagebox.showinfo('错误！', '连接数据库失败！')
